1. Field of the Invention
The invention is in the field of application-level memory management in computer software systems. It specifically relates to techniques for managing memory in security-analysis systems to keep memory usage within the available virtual memory bounds, and to enable security analysis of larger target applications.
2. Description of the Related Art
Modern computing uses memory management techniques provided by the operating system. In short, the computer typically has a fixed amount of actual memory, and the operating system effectively creates the illusion to applications running on the computer system that they not only can use the memory by themselves but that the amount of memory is larger than the actual amount. This is typically referred to as “virtual memory” and very typically the memory—whether actual or virtual is allocated and managed in fixed sized units known as “pages.” The application programs are completely ignorant of the virtual memory mechanics. See, e.g., “Modern Operating Systems” by Andrew Tanenbaum.
“Pointer swizzling” is a known application-level technique for addressing the situation in which an application is consuming a larger amount of memory than the virtual memory limit. In short, the pointer-swizzling system moves pages of memory between persistent memory (on disk) and transient memory (in the application's virtual address space), fixing up (“swizzling”) pointers to objects residing in that memory as it does so. See, e.g., “Pointer Swizzling at Page Fault Time” by Paul Wilson and Sheetal Kakkad or U.S. Pat. No. 5,794,256 (“Pointer Swizzling Facility Using Three-State References to Manage Access to Referenced Objects”)
Another prior art system is described in U.S. Pat. No. 5,920,723 (“Compiler with Inter-procedural Optimization”). This describes a compiler that swaps intermediate program representation to and from disk at a compilation-unit granularity, to support interprocedural optimizations when the entire program representation does not fit in virtual memory. This system is performing application level memory management in the context of a compiler. This is relevant because it is doing swapping at the C++ object level, and it is swapping similar sorts of objects as we are, i.e. objects that are part of the intermediate representation of a computer program.